/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mwt.xml.xdbforms.dblayer.query.impl;

import mwt.xml.xdbforms.dblayer.query.Criterion;

/**
 * tutti i metodi sono statici
 * Definisce delle Restrictions proprie
 * dell'sql.
 * @author Gianfranco Murador, Cristian Castiglia, Matteo Ferri
 */
public class Restriction {


    /**
     * Definisce una restriction  nome = valore
     * @param name nome del campo
     * @param val valore 
     * @return Oggetto Criterion rappresentate l'espressione
     */
    public static Criterion eq(String name, Object val) {

        System.out.println("Restriction.eq()");

        String stmt;
        Criterion c = new CriterionImpl();
        c.setValue(val);
        stmt = " " + name + "=? ";
        c.setRestriction(stmt);

        return c;
    }

    /**
     * Definisce una restriction nome &lt; valore
     * @param name nome del campo
     * @param val valore
     * @return Criterion rappresentante l'espressione
     */

    public static Criterion lt(String name, Object val) {

        String stmt;
        Criterion c = new CriterionImpl();
        c.setValue(val);
        stmt = " " + name + "<? ";
        c.setRestriction(stmt);
        return c;

    }

    /**
     * Definisce una restriction nome &lt;= value
     * @param name nome del campo
     * @param val valore
     * @return Criterion rappresentante l'espressione
     */

    public static Criterion leq(String name, Object val) {

        String stmt;
        Criterion c = new CriterionImpl();
        c.setValue(val);
        stmt = " " + name + "<=?";
        c.setRestriction(stmt);
        return c;
    }

    /**
     * Definisce una restriction name &gt; val
     * @param name nome della colonna
     * @param val valore
     * @return ritorna un Criterion rappresentante l'espressione
     */

    public static Criterion gt(String name, Object val) {

        String stmt;
        Criterion c = new CriterionImpl();
        c.setValue(val);
        stmt = " " + name + ">?";
        c.setRestriction(stmt);
        return c;
    }

    /**
     * Rappresenta una restrticition name &gt;= val
     * @param name nome della colonna
     * @param val valore della colonna
     * @return Criterion rappresentante l'espressione
     */

    public static Criterion geq(String name, Object val) {

        String stmt;
        Criterion c = new CriterionImpl();
        c.setValue(val);
        stmt = " " + name + ">=?";
        c.setRestriction(stmt);
        return c;

    }

    /**
     * Mette in and due Criterion per contatenare due
     * espressione in AND
     * @param c1 primo operando
     * @param c2 secondo operando
     * @return Nuovo Criterion rappresentante l'espressione c1 AND c2
     */

    public static Criterion and(Criterion c1, Criterion c2) {

        System.out.println("Restriction.and()");

        String stmt;
        Criterion c = new CriterionImpl();
        c.setValues(c1.getValues());
        c.setValues(c2.getValues());
        stmt = c1.toSQLString() + " AND " + c2.toSQLString();
        c.setRestriction(stmt);
        return c;

    }

    /**
     * Mette in or due Criterion
     * @param c1 primo operando
     * @param c2 secondo operando
     * @return Criterion rappresentante l'espression c1 OR c2
     */

    public static Criterion or(Criterion c1, Criterion c2) {

        String stmt;

        Criterion c = new CriterionImpl();
        c.setValues(c1.getValues());
        c.setValues(c2.getValues());
        stmt = c1.toSQLString() + " OR " + c2.toSQLString();
        c.setRestriction(stmt);
        return c;

    }
}
